{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "数据的介绍在这： http://archive.ics.uci.edu/ml/datasets/Combined+Cycle+Power+Plant\n",
    "\n",
    "数据的下载地址在这： http://archive.ics.uci.edu/ml/machine-learning-databases/00294/\n",
    "\n",
    "循环发电场的数据，共有9568个样本数据，每个数据有5列，分别是:AT（温度）, V（压力）, AP（湿度）, RH（压强）, PE（输出电力)。\n",
    "$$\n",
    "PE = \\theta_0 + \\theta_1*AT + \\theta_2*V + \\theta_3*AP + \\theta_4*RH\n",
    "$$\n",
    "需要学习$\\theta_0, \\theta_1, \\theta_2, \\theta_3, \\theta_4$     5个参数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from sklearn import datasets, linear_model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>AT</th>\n",
       "      <th>V</th>\n",
       "      <th>AP</th>\n",
       "      <th>RH</th>\n",
       "      <th>PE</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>14.96</td>\n",
       "      <td>41.76</td>\n",
       "      <td>1024.07</td>\n",
       "      <td>73.17</td>\n",
       "      <td>463.26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>25.18</td>\n",
       "      <td>62.96</td>\n",
       "      <td>1020.04</td>\n",
       "      <td>59.08</td>\n",
       "      <td>444.37</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>5.11</td>\n",
       "      <td>39.40</td>\n",
       "      <td>1012.16</td>\n",
       "      <td>92.14</td>\n",
       "      <td>488.56</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>20.86</td>\n",
       "      <td>57.32</td>\n",
       "      <td>1010.24</td>\n",
       "      <td>76.64</td>\n",
       "      <td>446.48</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>10.82</td>\n",
       "      <td>37.50</td>\n",
       "      <td>1009.23</td>\n",
       "      <td>96.62</td>\n",
       "      <td>473.90</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      AT      V       AP     RH      PE\n",
       "0  14.96  41.76  1024.07  73.17  463.26\n",
       "1  25.18  62.96  1020.04  59.08  444.37\n",
       "2   5.11  39.40  1012.16  92.14  488.56\n",
       "3  20.86  57.32  1010.24  76.64  446.48\n",
       "4  10.82  37.50  1009.23  96.62  473.90"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_excel('data/Folds5x2_pp.xlsx')\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>AT</th>\n",
       "      <th>V</th>\n",
       "      <th>AP</th>\n",
       "      <th>RH</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>14.96</td>\n",
       "      <td>41.76</td>\n",
       "      <td>1024.07</td>\n",
       "      <td>73.17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>25.18</td>\n",
       "      <td>62.96</td>\n",
       "      <td>1020.04</td>\n",
       "      <td>59.08</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>5.11</td>\n",
       "      <td>39.40</td>\n",
       "      <td>1012.16</td>\n",
       "      <td>92.14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>20.86</td>\n",
       "      <td>57.32</td>\n",
       "      <td>1010.24</td>\n",
       "      <td>76.64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>10.82</td>\n",
       "      <td>37.50</td>\n",
       "      <td>1009.23</td>\n",
       "      <td>96.62</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      AT      V       AP     RH\n",
       "0  14.96  41.76  1024.07  73.17\n",
       "1  25.18  62.96  1020.04  59.08\n",
       "2   5.11  39.40  1012.16  92.14\n",
       "3  20.86  57.32  1010.24  76.64\n",
       "4  10.82  37.50  1009.23  96.62"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = data[['AT', 'V', 'AP', 'RH']]\n",
    "X.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PE</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>463.26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>444.37</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>488.56</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>446.48</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>473.90</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       PE\n",
       "0  463.26\n",
       "1  444.37\n",
       "2  488.56\n",
       "3  446.48\n",
       "4  473.90"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y = data[['PE']]\n",
    "y.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(7176, 4)\n",
      "(7176, 1)\n",
      "(2392, 4)\n",
      "(2392, 1)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)\n",
    "print (X_train.shape)\n",
    "print (y_train.shape)\n",
    "print (X_test.shape)\n",
    "print (y_test.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 线性回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "linreg = LinearRegression()\n",
    "\n",
    "linreg.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[460.05727267]\n",
      "[[-1.96865472 -0.2392946   0.0568509  -0.15861467]]\n"
     ]
    }
   ],
   "source": [
    "print (linreg.intercept_)\n",
    "print (linreg.coef_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MSE: 20.837191547220353\n",
      "RMSE: 4.564777272465805\n"
     ]
    }
   ],
   "source": [
    "#模型拟合测试集\n",
    "y_pred = linreg.predict(X_test)\n",
    "from sklearn import metrics\n",
    "# 用scikit-learn计算MSE\n",
    "print (\"MSE:\",metrics.mean_squared_error(y_test, y_pred))\n",
    "# 用scikit-learn计算RMSE\n",
    "print (\"RMSE:\",np.sqrt(metrics.mean_squared_error(y_test, y_pred)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MSE: 23.905653799527794\n",
      "RMSE: 4.889340834870054\n"
     ]
    }
   ],
   "source": [
    "X = data[['AT', 'V', 'AP']]\n",
    "y = data[['PE']]\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)\n",
    "from sklearn.linear_model import LinearRegression\n",
    "linreg = LinearRegression()\n",
    "linreg.fit(X_train, y_train)\n",
    "#模型拟合测试集\n",
    "y_pred = linreg.predict(X_test)\n",
    "from sklearn import metrics\n",
    "# 用scikit-learn计算MSE\n",
    "print (\"MSE:\",metrics.mean_squared_error(y_test, y_pred))\n",
    "# 用scikit-learn计算RMSE\n",
    "print (\"RMSE:\",np.sqrt(metrics.mean_squared_error(y_test, y_pred)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MSE: 20.789514347328225\n",
      "RMSE: 4.559551989760422\n"
     ]
    }
   ],
   "source": [
    "X = data[['AT', 'V', 'AP', 'RH']]\n",
    "y = data[['PE']]\n",
    "from sklearn.model_selection import cross_val_predict\n",
    "predicted = cross_val_predict(linreg, X, y, cv=9)\n",
    "# 用scikit-learn计算MSE\n",
    "print (\"MSE:\",metrics.mean_squared_error(y, predicted))\n",
    "# 用scikit-learn计算RMSE\n",
    "print (\"RMSE:\",np.sqrt(metrics.mean_squared_error(y, predicted)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "ax.scatter(y, predicted)\n",
    "ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k-', lw=4)\n",
    "ax.set_xlabel('Measured')\n",
    "ax.set_ylabel('Predicted')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Ridge回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = data[['AT', 'V', 'AP', 'RH']]\n",
    "y = data[['PE']]\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Ridge(alpha=1, copy_X=True, fit_intercept=True, max_iter=None, normalize=False,\n",
       "      random_state=None, solver='auto', tol=0.001)"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import Ridge\n",
    "ridge = Ridge(alpha=1)\n",
    "ridge.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[460.04983649]\n",
      "[[-1.96862642 -0.23930532  0.05685793 -0.15860993]]\n"
     ]
    }
   ],
   "source": [
    "print( ridge.intercept_)\n",
    "print (ridge.coef_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "$$\n",
    "PE = 447.05552892 - 1.97373209*AT - 0.2323016*V + 0.06935852*AP - 0.15806479*RH\n",
    "$$\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "7.0"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import RidgeCV\n",
    "ridgecv = RidgeCV(alphas=[0.01, 0.1, 0.5, 1, 3, 5, 7, 10, 20, 100])\n",
    "ridgecv.fit(X_train, y_train)\n",
    "ridgecv.alpha_  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 用scikit-learn研究超参数α和回归系数θ的关系\n",
    "- 通过Ridge回归的损失函数表达式可以看到，α越大，那么正则项惩罚的就越厉害，得到回归系数θ就越小，最终趋近与0。而如果α越小，即正则化项越小，那么回归系数θ就越来越接近于普通的线性回归系数。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 10个样本、每个样本10个特征"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "# X is a 10x10 matrix\n",
    "X = 1. / (np.arange(1, 11) + np.arange(0, 10)[:, np.newaxis])\n",
    "# y is a 10 x 1 vector\n",
    "y = np.ones(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 构建200个alpha值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1.0000000e-10, 1.0969858e-10])"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n_alphas = 200\n",
    "# alphas count is 200, 都在10的-10次方和10的-2次方之间\n",
    "alphas = np.logspace(-10, -2, n_alphas)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 循环200次，计算得出每次参数theta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "#循环200次，计算得出\n",
    "clf = linear_model.Ridge(fit_intercept=False)\n",
    "coefs = []\n",
    "# 循环200次\n",
    "for a in alphas:\n",
    "    #设置本次循环的超参数\n",
    "    clf.set_params(alpha=a)\n",
    "    #针对每个alpha做ridge回归\n",
    "    clf.fit(X, y)\n",
    "    # 把每一个超参数alpha对应的theta存下来\n",
    "    coefs.append(clf.coef_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 10个参数theta 在alpha不同时，值的变化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = plt.gca()\n",
    "\n",
    "ax.plot(alphas, coefs)\n",
    "#将alpha的值取对数便于画图\n",
    "ax.set_xscale('log')\n",
    "#翻转x轴的大小方向，让alpha从大到小显示\n",
    "ax.set_xlim(ax.get_xlim()[::-1]) \n",
    "plt.xlabel('alpha')\n",
    "plt.ylabel('weights')\n",
    "plt.title('Ridge coefficients as a function of the regularization')\n",
    "plt.axis('tight')\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
